# 基础节点访问器的类

class NodeVisitor:
	# 访问节点方法
	def visit(self,node):
		if node=='':
			return;
		# 获取节点类型名称组成访问器方法名（子类Interpreter中方法的名称）
		method_name='visit_'+type(node).__name__;

		# print(node)
		# print(method_name)
		'''
			获取访问器对象，
			visitor为Interpreter中的visit_BinaryOperator和visit_Num函数
			找不到访问器对象时抛出异常generic_visit
		'''
		visitor=getattr(self,method_name,self.generic_visit);

		return visitor(node);

	# 抛出异常
	def generic_visit(self, node):
		raise Exception(f'未找到"visit_{type(node).__name__}()"方法！')  # 抛出异常
